package com.yyge;

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;

import java.util.Map;

/**
 *  简单理解：二维平面
 *  Table类型其实就是Map<FirstName, Map<LastName, Person>>，可以使用两个key对value进行索引。
 *  Table的实现类：
 *  HashBasedTable：本质上是 HashMap<R, HashMap<C, V>>
 *  TreeBasedTable：本质上是TreeMap<R, TreeMap<C, V>>
 *  ImmutableTable
 *  ArrayTable：它要求在构造时指定完整的行和列，但在表比较密集时，它由一个二维数组支持，以提高速度和内存效率。
 *
 *  Table的第一个key被设置为row的概念，第二个key被设置为column的概念，也就是说就像excel表一样，行和列才会对应一个值，相当于是一个二维平面。
 */
public class TableTest {
    public static void main(String[] args) {
        Table<String, String, String> table = HashBasedTable.create();
        table.put("张", "三", "居住山东");
        table.put("张", "九", "居住北京");
        table.put("王", "五", "居住山东");

        // 返回 第二个key + value的map
        Map<String, String> zhang = table.row("张");
        System.out.println(zhang); // {三=居住山东, 九=居住北京}

        // 返回 第一个key + value的map
        Map<String, String> place = table.column("三");
        System.out.println(place); // {张=居住山东}

        Map<String, Map<String, String>> stringMapMap = table.rowMap();
        System.out.println(stringMapMap); // {张={三=居住山东, 九=居住北京}, 王={五=居住山东}}

    }
}
